package com.w7vm.menuweb.dao;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;


import com.w7vm.menuweb.entity.AcessoWeb;
import com.w7vm.menuweb.utility.ConstantesEJB;

@Stateless
public class AcessoDAO extends GenericDAO<AcessoWeb> {
	
	ConstantesEJB constEJB = new ConstantesEJB();
	
	@PersistenceContext
	private EntityManager em;
	
	public AcessoDAO() {
		super(AcessoWeb.class);
		// TODO Auto-generated constructor stub
	}
	
	
	public List<AcessoWeb> findAcessoRestauranteByUsuario(String username){
		System.out.println("[IAM-EJB][findAcessoByUsuario] :"+ username);
		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("username", username);   
		return super.findByCriterion(AcessoWeb.FIND_RESTAURANTEACESSO_BY_EMAIL, parameters);
	}

	// Perfil Adm-Conta
	public List<AcessoWeb> findUsuariosAllByCodRestaurante(int idRestaurante){
		System.out.println("[IAM-EJB][findUsuariosAllByCodRestaurante] :"+ idRestaurante);
		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("idRestaurante", idRestaurante);   
		return super.findByCriterion(AcessoWeb.FIND_USUARIOSALL_BY_CODRESTAURANTE, parameters);
	}

	// Perfil Adm-Restaurante
	public List<AcessoWeb> findUsuariosSedeFilialByCodRestaurante(int idUsuario,int idRestaurante, String tipo){
		System.out.println("[IAM-EJB][findUsuariosSedeFilialByCodRestaurante]");
		
		if(tipo.equals(constEJB.Sede)){
			System.out.println("[IAM-EJB][findUsuariosSedeFilialByCodRestaurante] SEDE :"+ idRestaurante);
			Map<String, Object> parameters = new HashMap<String, Object>();
			parameters.put("idRestaurante", idRestaurante);   
			return super.findByCriterion(AcessoWeb.FIND_USUARIOSSEDE_BY_CODRESTAURANTE, parameters);
		}
		else if(tipo.equals(constEJB.Filial)){
			System.out.println("[IAM-EJB][findUsuariosSedeFilialByCodRestaurante] FILIAL :"+ idRestaurante);
			Map<String, Object> parameters = new HashMap<String, Object>();
			parameters.put("idUsuario", idUsuario);   
			parameters.put("idRestaurante", idRestaurante);   
			return super.findByCriterion(AcessoWeb.FIND_USUARIOSFILIAIS_BY_CODRESTAURANTE, parameters);
		}
		return null; 
	}
			
	// Perfil Usuario
	public List<AcessoWeb> findUsuarioByCodUsuario(String username){
		System.out.println("[IAM-EJB][findUsuarioByCodUsuario] :"+ username);
		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("username", username);   
		return super.findByCriterion(AcessoWeb.FIND_USUARIO_BY_CODUSUARIO, parameters);
	}
	
	// Perfil Usuario
	public List<AcessoWeb> findUsuarioAcessoByCodUsuario(int idUsuario){
		System.out.println("[IAM-EJB][findUsuarioAcessoByCodUsuario] :"+ idUsuario);
		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("idUsuario", idUsuario);   
		return super.findByCriterion(AcessoWeb.FIND_USUARIOACESSO_BY_CODUSUARIO, parameters);
	}
	
	// Perfil ADM_
	public List<String> findUsuarioByCodRestaurante(int idRestaurante){
		System.out.println("[IAM-EJB][findUsuarioByCodRestaurante] :"+ idRestaurante);
		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("idRestaurante", idRestaurante);   
		return super.findByCriterionString(AcessoWeb.FIND_USUARIO_BY_CODRESTAURANTE, parameters);
	}
	
	// Perfil Adm Restaurante 
	// Descrição: Busca Restaurante para perfil AdmRestaurante considerando 
	// os restaurantes permitido para acesso pelo AdmConta.
	public List<AcessoWeb> findRestauranteByCodUsuario(int idUsuario){
		System.out.println("[IAM-EJB][findRestauranteByCodUsuario] :"+ idUsuario);
		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("idUsuario", idUsuario);   
		return super.findByCriterion(AcessoWeb.FIND_RESTAURANTE_BY_CODUSUARIO, parameters);
	}
	

	public AcessoWeb mergeAcesso(AcessoWeb entity){
		return super.update(entity);
	}	
	
	 // Perfil Adm Restaurante 
		// Descrição: Busca acessos (sede/filiais) que o usuario ADM_RESTAURANTE tem acesso
		// os restaurantes permitido para acesso pelo AdmConta.
	public List<AcessoWeb> findTipoAcessoByCodUsuario(int idUsuario){
			System.out.println("[IAM-EJB][findTipoAcessoByCodUsuario] :"+ idUsuario);
			Map<String, Object> parameters = new HashMap<String, Object>();
			parameters.put("idUsuario", idUsuario);   
			return super.findByCriterion(AcessoWeb.FIND_TIPOACESSO_BY_CODUSUARIO, parameters);
	}
	
	public AcessoWeb saveAcesso(AcessoWeb acesso){
		em.persist(acesso);
		return acesso;
	}
	
}
